package dis.servlet;

import dis.bean.Postit;
import dis.bean.Proyecto;
import dis.bean.Usuario;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;

/**
 *
 * @author Pashi
 */
public class PostitServlet extends HttpServlet implements ActionServlet{
    private static Proyecto[] proyectos=new Proyecto[100];
    private static Postit postitNuevo=new Postit();
    private static Postit postitEditado=new Postit();
    private static Postit postitEliminado;
  /*  private Timer timer = new Timer (1000, new ActionListener () { 
        @Override
                public void actionPerformed(ActionEvent e) 
                {   postitNuevo=null; 
                postitEliminado=null;
                } });*/

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String nombreAccion = request.getParameter("metodo");  
        if(nombreAccion.compareToIgnoreCase("add")==0){
            try {
                 agregar(response, request.getParameter("objeto"));
            } catch (ParseException ex) {
                System.out.println("Error");
            }
        }else if(nombreAccion.compareToIgnoreCase("delete")==0){
            try {
                 eliminar(response, request.getParameter("objeto"));
            } catch (ParseException ex) {
                System.out.println("Error");
            }         
        }else if(nombreAccion.compareToIgnoreCase("postitActuales")==0){
            try {
                 getPostitsActuales(response, request.getParameter("objeto"));
            } catch (ParseException ex) {
                System.out.println("Error");
            } 
        }
        else if(nombreAccion.compareToIgnoreCase("notificarAP")==0){
            getNotificacionesA(response);
        }
        else if(nombreAccion.compareToIgnoreCase("notificarBP")==0){
            getNotificacionesB(response);
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    public void agregar(HttpServletResponse response,String jsonString) throws ParseException, IOException{        
        JSONObject json =  new JSONObject(jsonString);
        Postit postitN=new Postit();
        Usuario userOwner=new Usuario();
        int idProyecto=json.getInt("idProyecto");
        if(proyectos[idProyecto]==null){
            proyectos[idProyecto]=new Proyecto();
        }
        proyectos[idProyecto].setId(idProyecto);  
        postitN.setIdProyecto(idProyecto);
        postitN.setId(json.getInt("idPostit"));     
        postitN.setTitulo(json.getString("titulo"));   
        postitN.setTexto(json.getString("texto"));    
        postitN.setArea(json.getInt("area"));
        userOwner.setId(json.getInt("idUsuario"));       
        postitN.setUsuario(userOwner);
        postitNuevo=postitN; 
        proyectos[idProyecto].setPostit(postitNuevo.getId(), postitNuevo);  
        proyectos[idProyecto].setUsuario(userOwner);        
       // timer.start();
    } 

    public void eliminar(HttpServletResponse response,String jsonString) throws ParseException, IOException{        
        JSONObject json =  new JSONObject(jsonString);
        Postit postitE=new Postit();
        int idProyecto=json.getInt("idProyecto");
       // user.setId(json.getInt("idUsuario"));
        //user.setNombre(json.getString("nombreUsuario"));
        postitE.setIdProyecto(idProyecto);
        postitE.setId(json.getInt("idPostit"));
       // postitE.setTexto(json.getString("textoPostit"));
    //    postitE.setTexto(proyectos[idProyecto].getPostits()[postitE.getId()].getTexto());
      //  postitE.setTexto(proyectos[idProyecto].getPostits()[postitE.getId()].getTitulo());
        postitE.setArea(json.getInt("area"));
        //postitE.setUsuario(user);
        postitEliminado=postitE;
        proyectos[idProyecto].setPostit(postitE.getId(), null);
       // proyectos[idProyecto].setUsuario(user);    
        
        if(postitNuevo!=null&&postitEliminado!=null&&postitNuevo.getId()==postitEliminado.getId()){
            postitNuevo=null;
        }
       // timer.start();
    }
    
    
    private void getPostitsActuales(HttpServletResponse response ,String jsonString) throws ParseException, IOException {
        response.setContentType("text/html;charset=UTF-8"); 
        JSONObject json =  new JSONObject(jsonString); 
        JSONObject jsonResponse =  new JSONObject();  
        int idProyecto=json.getInt("idProyecto");   
        PrintWriter out = response.getWriter();  
        if(proyectos[idProyecto]!=null){            
       for(int i=0;i<proyectos[idProyecto].getPostits().length;i++){
                if(proyectos[idProyecto].getPostits()[i]!=null){
                    jsonResponse.put("idProyecto",idProyecto);
                    jsonResponse.put("idUsuario",  proyectos[idProyecto].getPostits()[i].getUsuarios().getId());
                    jsonResponse.put("idPostit", proyectos[idProyecto].getPostits()[i].getId());
                    jsonResponse.put("titulo", proyectos[idProyecto].getPostits()[i].getTitulo());
                    jsonResponse.put("texto", proyectos[idProyecto].getPostits()[i].getTexto());
                    jsonResponse.put("area", proyectos[idProyecto].getPostits()[i].getArea());
                    out.println(jsonResponse.toString());
                    //out.println("postit: "+proyectos[idProyecto].getPostits()[i].getId()+"-"+jsonResponse.toString());                                      
                    //ó
                    //jsonResponse.putOpt("postit["+i+"]",proyectos[idProyecto].getPostits().get(i));
                }
            }
        }else{
         jsonResponse.put("postits","nada");            
        out.println(jsonResponse.toString());   
        }
        out.close();
    }
         
       private void getNotificacionesA(HttpServletResponse response) throws IOException {
            response.setContentType("text/html;charset=UTF-8");
            JSONObject jsonResponse =  new JSONObject();    
            if(postitNuevo!=null){
                jsonResponse.put("idUsuario", postitNuevo.getUsuarios().getId());
                jsonResponse.put("idPostit", postitNuevo.getId());
                jsonResponse.put("titulo", postitNuevo.getTitulo());
                jsonResponse.put("texto", postitNuevo.getTexto());
                jsonResponse.put("idProyecto", postitNuevo.getIdProyecto());            
                jsonResponse.put("area", postitNuevo.getArea());
                jsonResponse.put("accion", "add");
           }
            PrintWriter output = response.getWriter();
            output.println(jsonResponse.toString());
            output.close(); 
        } 
        
        private void getNotificacionesB(HttpServletResponse response) throws IOException {
            response.setContentType("text/html;charset=UTF-8"); 
            JSONObject jsonResponseD =  new JSONObject();
            if(postitEliminado!=null){
                jsonResponseD.put("idUsuario", postitEliminado.getUsuarios().getId());
                jsonResponseD.put("nombreUsuario", postitEliminado.getUsuarios().getNombre());
                jsonResponseD.put("idPostit", postitEliminado.getId());
                jsonResponseD.put("nombreProyecto", postitEliminado.getTexto());
                jsonResponseD.put("idProyecto", postitEliminado.getIdProyecto());            
                jsonResponseD.put("area", postitEliminado.getArea());
                jsonResponseD.put("accion", "delete");
            }
            PrintWriter outputD = response.getWriter();
            outputD.println(jsonResponseD.toString());
           // System.out.println(jsonResponseD.toString());
            outputD.close();       
        }

    @Override
    public void modificar(HttpServletResponse response, String json) throws ParseException, IOException {
    }
}